Pipelining is a technique used in chip design that allows data propagation through sampling hardware stages and achieves high clock speeds. Pipelining may have various drawbacks. For example, if the pipeline has design bugs, the bugs may be difficult, costly, or even impossible to circumvent. In addition, the pipeline design may have accounted for an insufficient amount of time for logic propagation. Further, pipelines are often designed to perform a specific function or per specific specifications, and reusing the logic incorporated into a pipeline to perform a different function, even a slightly different one, may be impossible.
Firmware may be used instead of hardware pipelining to overcome the above-described deficiencies. However, using firmware may result in the development of large patches, which may be time and resource consuming, slow, and render useless the pipeline logic already configured in a given chip or digital block.